package com.lijy.awt;

import java.awt.*;

/**
 * @author Lijingyu on 2017/10/18.
 */
public class ToeTest extends Frame {
    TextField rows = new TextField("3");
    TextField cols = new TextField("3");
    public ToeTest() {
        setTitle("Toe Test");
        Panel p = new Panel();
        p.setLayout(new GridLayout(2,2));
        p.add(new Label("Rows", Label.CENTER));
        p.add(rows);
        p.add(new Label("Columns", Label.CENTER));
        p.add(cols);
        add("North", p);
        add("South", new Button("go"));

    }

    public boolean handleEvent(Event evt) {
        if(evt.id == Event.WINDOW_DESTROY){
            System.exit(0);
        }
        else {
            return super.handleEvent(evt);
        }
        return true;
    }

    public boolean action(Event evt, Object arg) {
        if (arg.equals("go")) {
            Dialog d = new ToeDialog(this, Integer.parseInt(rows.getText()),Integer.parseInt(cols.getText()));
            d.show();
        }
        else {
            return super.action(evt, arg);
        }
        return true;
    }

    public static void main(String[] args) {
        Frame f = new ToeTest();
        f.resize(200, 100);
        f.show();
    }

}

class ToeDialog extends Dialog {

    static final int BLANK = 0;
    static final int XX = 1;
    static final int OO = 2;
    int turn = XX; // Start with x's turn

    public ToeDialog(Frame parent, int w, int h) {
        super(parent, "The game itself", false);
        setLayout(new GridLayout(w, h));
        for(int i = 0; i < w * h; i++) {
            add(new ToeButton(this));
        }
        resize(w * 50, h * 50);
    }

    public boolean handleEvent(Event evt) {
        if(evt.id == Event.WINDOW_DESTROY) {
            dispose();
        }
        else {
            return super.handleEvent(evt);
        }
        return true;
    }
}

class ToeButton extends Canvas {

    int state = ToeDialog.BLANK;

    ToeDialog parent;

    ToeButton(ToeDialog parent) {
        this.parent = parent;
    }

    public void paint(Graphics g) {

        int x1 = 0;
        int y1 = 0;
        int x2 = size().width - 1;
        int y2 = size().height - 1;

        g.drawRect(x1, y1, x2, y2);

        x1 = x2 / 4;
        y1 = y2 / 4;
        int wide = x2 / 2;
        int high = y2 / 2;

        if (state == ToeDialog.XX) {
            g.drawLine(x1, y1, x1 + wide, y1 + high);
            g.drawLine(x1, y1 + high, x1 + wide, y1);
        }
        if (state == ToeDialog.OO) {
            g.drawOval(x1, y1, x1 + wide / 2, y1 + high / 2);
        }
    }

    public boolean mouseDown(Event evt, int x, int y) {
        if (state == ToeDialog.BLANK) {
            state = parent.turn;
            parent.turn = (parent.turn == ToeDialog.XX ? ToeDialog.OO : ToeDialog.XX);
        } else {
            state = (state == ToeDialog.XX ? ToeDialog.OO : ToeDialog.XX);
        }
        repaint();
        return true;
    }

}